// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: braces fieldsfirst space lnc
package com.google.gson.internal.bind;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSyntaxException;
import com.google.gson.TypeAdapter;
import com.google.gson.internal.JsonReaderInternalAccess;
import com.google.gson.internal.ObjectConstructor;
import com.google.gson.internal.Streams;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
// Referenced classes of package com.google.gson.internal.bind:
// m, MapTypeAdapterFactory
final class f extends TypeAdapter
{
final MapTypeAdapterFactory a;
private final TypeAdapter b;
private final TypeAdapter c;
private final ObjectConstructor d;
public f(MapTypeAdapterFactory maptypeadapterfactory, Gson gson, Type type, TypeAdapter typeadapter, Type type1, TypeAdapter typeadapter1, ObjectConstructor objectconstructor)
{
a = maptypeadapterfactory;
super();
b = new m(gson, typeadapter, type);
c = new m(gson, typeadapter1, type1);
d = objectconstructor;
}
private String a(JsonElement jsonelement)
{
if (jsonelement.isJsonPrimitive())
{
JsonPrimitive jsonprimitive = jsonelement.getAsJsonPrimitive();
if (jsonprimitive.isNumber())
{
return String.valueOf(jsonprimitive.getAsNumber());
}
if (jsonprimitive.isBoolean())
{
return Boolean.toString(jsonprimitive.getAsBoolean());
}
if (jsonprimitive.isString())
{
return jsonprimitive.getAsString();
} else
{
throw new AssertionError();
}
}
if (jsonelement.isJsonNull())
{
return "null";
} else
{
throw new AssertionError();
}
}
public Map a(JsonReader jsonreader)
{
JsonToken jsontoken = jsonreader.peek();
if (jsontoken == JsonToken.NULL)
{
jsonreader.nextNull();
return null;
}
Map map = (Map)d.construct();
if (jsontoken == JsonToken.BEGIN_ARRAY)
{
jsonreader.beginArray();
for (; jsonreader.hasNext(); jsonreader.endArray())
{
jsonreader.beginArray();
Object obj1 = b.read(jsonreader);
if (map.put(obj1, c.read(jsonreader)) != null)
{
throw new JsonSyntaxException((new StringBuilder()).append("duplicate key: ").append(obj1).toString());
}
}
jsonreader.endArray();
return map;
}
jsonreader.beginObject();
while (jsonreader.hasNext())
{
JsonReaderInternalAccess.INSTANCE.promoteNameToValue(jsonreader);
Object obj = b.read(jsonreader);
if (map.put(obj, c.read(jsonreader)) != null)
{
throw new JsonSyntaxException((new StringBuilder()).append("duplicate key: ").append(obj).toString());
}
}
jsonreader.endObject();
return map;
}
public void a(JsonWriter jsonwriter, Map map)
{
int i = 0;
if (map == null)
{
jsonwriter.nullValue();
return;
}
if (!MapTypeAdapterFactory.a(a))
{
jsonwriter.beginObject();
java.util.Map.Entry entry1;
for (Iterator iterator1 = map.entrySet().iterator(); iterator1.hasNext(); c.write(jsonwriter, entry1.getValue()))
{
entry1 = (java.util.Map.Entry)iterator1.next();
jsonwriter.name(String.valueOf(entry1.getKey()));
}
jsonwriter.endObject();
return;
}
ArrayList arraylist = new ArrayList(map.size());
ArrayList arraylist1 = new ArrayList(map.size());
Iterator iterator = map.entrySet().iterator();
boolean flag = false;
while (iterator.hasNext())
{
java.util.Map.Entry entry = (java.util.Map.Entry)iterator.next();
JsonElement jsonelement = b.toJsonTree(entry.getKey());
arraylist.add(jsonelement);
arraylist1.add(entry.getValue());
boolean flag1;
if (jsonelement.isJsonArray() || jsonelement.isJsonObject())
{
flag1 = true;
} else
{
flag1 = false;
}
flag = flag1 | flag;
}
if (flag)
{
jsonwriter.beginArray();
for (; i < arraylist.size(); i++)
{
jsonwriter.beginArray();
Streams.write((JsonElement)arraylist.get(i), jsonwriter);
c.write(jsonwriter, arraylist1.get(i));
jsonwriter.endArray();
}
jsonwriter.endArray();
return;
}
jsonwriter.beginObject();
for (; i < arraylist.size(); i++)
{
jsonwriter.name(a((JsonElement)arraylist.get(i)));
c.write(jsonwriter, arraylist1.get(i));
}
jsonwriter.endObject();
}
public Object read(JsonReader jsonreader)
{
return a(jsonreader);
}
public void write(JsonWriter jsonwriter, Object obj)
{
a(jsonwriter, (Map)obj);
}
}